/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.upc.dew.cobranzas.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import pe.edu.upc.dew.cobranzas.model.Contrato;
import pe.edu.upc.dew.cobranzas.model.Cuota;
import pe.edu.upc.dew.cobranzas.model.Trabajador;
import pe.edu.upc.dew.cobranzas.model.Visita;
import pe.edu.upc.dew.cobranzas.service.ContratoServiceImpl;
import pe.edu.upc.dew.cobranzas.service.CuotaServiceImpl;
import pe.edu.upc.dew.cobranzas.service.TrabajadorServiceImpl;

/**
 *
 * @author Ivan
 */
public class VisitaDaoImpl implements VisitaDao {

    public List<Visita> visitas = new ArrayList<Visita>();
    private ContratoServiceImpl contratoService;
    private CuotaServiceImpl cuotaService;
    private TrabajadorServiceImpl trabajadorService;

    public void setContratoService(ContratoServiceImpl contratoService) {
        this.contratoService = contratoService;
    }

    public void setCuotaService(CuotaServiceImpl cuotaService) {
        this.cuotaService = cuotaService;
    }

    public void setTrabajadorService(TrabajadorServiceImpl trabajadorService) {
        this.trabajadorService = trabajadorService;
    }

    public boolean Registra(Contrato contrato, Cuota cuota, String fecha, Trabajador trabajador, String estado, String observaciones) {
        Connection connection = null;
        Statement st = null;
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.createStatement();
            st.executeQuery("insert into T_Visita values ('" + fecha + "','" + estado + "','" + observaciones + "'," + contrato.getIdContrato() + "," + cuota.getIdCuota() + ",'" + trabajador.getDni() + "')");
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {

            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
            return true;
        }
    }

    public boolean Elimina(int idContrato, int idCuota, String fecha) {
        Connection connection = null;
        Statement st = null;
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.createStatement();
            st.executeQuery("delete from T_Visita where idContrato=" + idContrato + " and idCuota=" + idCuota + " and fecha='" + fecha + "'");
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {

            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
            return true;
        }

    }

    public List<Visita> Listado(String dniTrabajador) {
        visitas.clear();
        Connection connection = null;
        Visita visita = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.createStatement();
            rs = st.executeQuery("select * from T_Visita where dni='" + dniTrabajador + "'");
            rs.next();
            do {

                visita = new Visita();
                visita.setFecha(rs.getString("fecha"));
                visita.setEstado(rs.getString("estado"));
                visita.setObservaciones(rs.getString("observaciones"));
                visita.setContrato(contratoService.getContratoPorCodigo(rs.getInt("idContrato")));
                visita.setCuota(cuotaService.getCuota(contratoService.getContratoPorCodigo(rs.getInt("idContrato")), rs.getInt("idCuota")));
                visita.setTrabajador(trabajadorService.getTrabajadorPorDni(rs.getString("dni")));
                this.visitas.add(visita);

            } while (rs.next());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ConnectionUtils.closeResultSet(rs);
            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
        }
        return visitas;
    }
}
